﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

using modActor;
using modUtileria;
using modDatos;
using modPeticiones;

using modLanGame;

namespace modElenco.Nave
{
    public class CNaveLan : CActor
    {
        CNaveDatos naveDatos = new CNaveDatos();

        public CNaveLan(int numJug)
        {
            base.init();

            data.escenarioDatos.primarykey = "Jugador_"+numJug;
            SCutileria.suministratrUtileria(this, "textura2D", "NaveRoja");
            data.drawDatos.frameActual = 1;
            data.drawDatos.frameTotal = 1;

            naveDatos.escala = 0.4f;

            data.escenarioDatos.recorte = base.refactorRect();
            data.escenarioDatos.recorte.Width = (int)(data.escenarioDatos.recorte.Width * naveDatos.escala);
            data.escenarioDatos.recorte.Height = (int)(data.escenarioDatos.recorte.Height * naveDatos.escala);

            //if (miEstado.destino != "NO EXISTE")
            //{
            //    data.escenarioDatos.posicion.X = miEstado.posicion.X;
            //    data.escenarioDatos.posicion.Y = miEstado.posicion.Y;
            //}

            naveDatos.velocidad = 10.0f;

            data.espectadorDatos.estadoAnterior = new Dictionary<string, bool>();
            data.espectadorDatos.estadoNuevo = new Dictionary<string, bool>();

            data.espectadorDatos.estadoAnterior.Add("MovIzq", false);
            data.espectadorDatos.estadoAnterior.Add("MovDer", false);
            data.espectadorDatos.estadoAnterior.Add("Quieto", true);
            data.espectadorDatos.estadoAnterior.Add("Arriba", false);
            data.espectadorDatos.estadoAnterior.Add("Abajo", false);

            data.espectadorDatos.estadoAnterior.Add("Vivo", true);
            data.espectadorDatos.estadoAnterior.Add("Zombi", false);
            data.espectadorDatos.estadoAnterior.Add("Muerto", false);

            data.espectadorDatos.estadoNuevo = data.espectadorDatos.estadoAnterior;

            data.drawDatos.multiSprite = false;

            data.botLimit = 800;
            data.topLimit = 0;
            data.leftLimit = 900;
            data.rightLimit = 0;
        }
        public override void ensayar(Microsoft.Xna.Framework.GameTime gameTime)
        {
            base.ensayar(gameTime);

            /*pasos:
              1- se cambia el frame por el correspondiente
              2- se corre la imagen de colicion
              3- logica de colicion
              4- s mueve figura de verdad*/
           // pqEstado_dat misDatos = SCPeticion.DaDatos(data.escenarioDatos.primarykey);

            //if (misDatos.destino != "NO EXISTE")
            //{
            //    data.escenarioDatos.posicion.X = misDatos.posicion.X;
            //    data.escenarioDatos.posicion.Y = misDatos.posicion.Y;

            //    naveDatos.rotacion = misDatos.rotacion;
            //}
        }

        private float anguloDeRotacion()
        {
            float angulo;

            angulo = (float)Math.Atan2(data.espectadorDatos.newMouseState.Y - data.escenarioDatos.posicion.Y,
                                data.espectadorDatos.newMouseState.X - data.escenarioDatos.posicion.X);

            return angulo;
        }

        public override void setearEstadosPorKeyBoard(Microsoft.Xna.Framework.Input.KeyboardState estado)
        {
            /*
             * En Objetos lan, estos no existen :P
             */

            base.setearEstadosPorKeyBoard(estado);
            #region aciones de movimiento
           /* if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Left) == true)
            {
                data.espectadorDatos.estadoNuevo["MovIzq"] = true;
                data.espectadorDatos.estadoNuevo["Quieto"] = false;
                data.espectadorDatos.estadoNuevo["MovDer"] = false;

                if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Up) == true)
                {
                    data.espectadorDatos.estadoNuevo["Arriba"] = true;
                    data.espectadorDatos.estadoNuevo["Quieto"] = false;
                    data.espectadorDatos.estadoNuevo["Abajo"] = false;
                }
                else
                {
                    if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Down) == true)
                    {
                        data.espectadorDatos.estadoNuevo["Abajo"] = true;
                        data.espectadorDatos.estadoNuevo["Quieto"] = false;
                        data.espectadorDatos.estadoNuevo["Arriba"] = false;
                    }
                    else
                    {
                        data.espectadorDatos.estadoNuevo["Arriba"] = false;
                        data.espectadorDatos.estadoNuevo["Abajo"] = false;
                    }
                }

            }
            else
            {
                if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Right) == true)
                {
                    data.espectadorDatos.estadoNuevo["MovDer"] = true;
                    data.espectadorDatos.estadoNuevo["Quieto"] = false;
                    data.espectadorDatos.estadoNuevo["MovIzq"] = false;

                    if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Up) == true)
                    {
                        data.espectadorDatos.estadoNuevo["Arriba"] = true;
                        data.espectadorDatos.estadoNuevo["Quieto"] = false;
                        data.espectadorDatos.estadoNuevo["Abajo"] = false;
                    }
                    else
                    {
                        if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Down) == true)
                        {
                            data.espectadorDatos.estadoNuevo["Abajo"] = true;
                            data.espectadorDatos.estadoNuevo["Quieto"] = false;
                            data.espectadorDatos.estadoNuevo["Arriba"] = false;
                        }
                        else
                        {
                            data.espectadorDatos.estadoNuevo["Arriba"] = false;
                            data.espectadorDatos.estadoNuevo["Abajo"] = false;
                        }
                    }
                }
                else
                {
                    if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Up) == true)
                    {
                        data.espectadorDatos.estadoNuevo["Arriba"] = true;
                        data.espectadorDatos.estadoNuevo["Quieto"] = false;
                        data.espectadorDatos.estadoNuevo["Abajo"] = false;

                        if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Left) == true)
                        {
                            data.espectadorDatos.estadoNuevo["MovIzq"] = true;
                            data.espectadorDatos.estadoNuevo["Quieto"] = false;
                            data.espectadorDatos.estadoNuevo["MovDer"] = false;
                        }
                        else
                            if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Right) == true)
                            {
                                data.espectadorDatos.estadoNuevo["MovDer"] = true;
                                data.espectadorDatos.estadoNuevo["Quieto"] = false;
                                data.espectadorDatos.estadoNuevo["MovIzq"] = false;
                            }
                            else
                            {
                                data.espectadorDatos.estadoNuevo["MovDer"] = false;
                                data.espectadorDatos.estadoNuevo["MovIzq"] = false;
                            }
                    }
                    else
                    {
                        if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Down) == true)
                        {
                            data.espectadorDatos.estadoNuevo["Abajo"] = true;
                            data.espectadorDatos.estadoNuevo["Quieto"] = false;
                            data.espectadorDatos.estadoNuevo["Arriba"] = false;

                            if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Left) == true)
                            {
                                data.espectadorDatos.estadoNuevo["MovIzq"] = true;
                                data.espectadorDatos.estadoNuevo["Quieto"] = false;
                                data.espectadorDatos.estadoNuevo["MovDer"] = false;
                            }
                            else
                                if (estado.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Right) == true)
                                {
                                    data.espectadorDatos.estadoNuevo["MovDer"] = true;
                                    data.espectadorDatos.estadoNuevo["Quieto"] = false;
                                    data.espectadorDatos.estadoNuevo["MovIzq"] = false;
                                }
                                else
                                {
                                    data.espectadorDatos.estadoNuevo["MovDer"] = false;
                                    data.espectadorDatos.estadoNuevo["MovIzq"] = false;
                                }
                        }
                        else
                        {
                            data.espectadorDatos.estadoNuevo["Quieto"] = true;
                            data.espectadorDatos.estadoNuevo["Arriba"] = false;
                            data.espectadorDatos.estadoNuevo["Abajo"] = false;
                            data.espectadorDatos.estadoNuevo["MovIzq"] = false;
                            data.espectadorDatos.estadoNuevo["MovDer"] = false;
                        }
                    }
                }
            }*/
            #endregion 

            #region estados animicos
            if (!data.espectadorDatos.estadoAnterior["Vivo"])
            {

            }
            #endregion
        }

        public override void setearEstadosPorMouse(MouseState estado)
        {
            /*En oBj lan esto no existe*/
            /*base.setearEstadosPorMouse(estado);*/
        }

        public override void drawInEscenary(ref Microsoft.Xna.Framework.Graphics.SpriteBatch sprite)
        {
            // base.drawInEscenary ( ref sprite );
            sprite.Draw(CreateRectanlge(data.escenarioDatos.recorte.Width, data.escenarioDatos.recorte.Height, Color.SeaGreen),
                        data.escenarioDatos.posicion,
                        null,
                        Color.White,
                        0.0f,
                        new Vector2(0, 0),
                        1.0f,
                        SpriteEffects.None,
                        1);

            //unico draw que vale la pena, el resto es de test
            //base.drawInEscenary ( ref sprite );

            sprite.Draw(data.drawDatos.texture,
                        new Vector2(data.escenarioDatos.posicion.X + data.escenarioDatos.recorte.Width / 2, data.escenarioDatos.posicion.Y + data.escenarioDatos.recorte.Height / 2),
                        null,
                        Color.White,
                        naveDatos.rotacion,
                        new Vector2(data.drawDatos.texture.Width / 2, data.drawDatos.texture.Height / 2),
                        0.4f,
                        SpriteEffects.None,
                        1);
            data.espectadorDatos.estadoAnterior = data.espectadorDatos.estadoNuevo;

        }

        public Texture2D CreateRectanlge(int lado1, int lado2, Color colorito)
        {
            Texture2D texture = new Texture2D(_BlackGlobal.graphics.GraphicsDevice, lado1, lado2);
            Color[] dataColor = new Color[lado1 * lado2];

            for (int i = 0; i < dataColor.Length; ++i)
            {
                dataColor[i] = colorito;
            }

            texture.SetData(dataColor);
            return texture;
        }

    }
}
